<?php
/**
 * cms栏目管理
 * @since   2019-11-30
 * @author  曾
 */

namespace app\admin\controller;


use app\model\CmsMenu;
use app\model\FilesManage; // 附件管理数据表
use app\util\ReturnCode;
use app\util\Tools;
use think\Request;

class CmsColumn extends Base
{

    /**
     * 获取菜单列表
     * @return array
     * @throws \think\exception\DbException
     * @author zhaoxiang <zhaoxiang051405@gmail.com>
     */
    public function index()
    {
        $list = (new CmsMenu)->where([])->order('sort', 'ASC')->select();
        $list = Tools::buildArrFromObj($list);
        $list = Tools::formatTree(Tools::listToTree($list));

        return $this->buildSuccess([
            'list' => $list
        ], '登录成功');
    }

    /**
     * 新增菜单
     * @return array
     * @author zhaoxiang <zhaoxiang051405@gmail.com>
     */
    public function add()
    {
        $postData = $this->request->post();
        /* $this->debug($postData);
         if (Request::instance()->isPost()){
             $this->debug(dump($postData)."当前为 POST 请求");
         }*/
        /*if ($postData['url']) {
            $postData['url'] = 'admin/' . $postData['url'];
        }*/
        $res = new CmsMenu($postData);
        // 过滤post数组中的非数据表字段数据
        $res->allowField(true)->save();
//        $res = CmsMenu::create($postData);

        // 新增成功后 把对应的缩略图改成引用状态
        $fileId = $this->request->post('menuimgid');
        if(isset($fileId)){
            // 如果有缩略图
            FilesManage::update([
                'id' => $fileId,
                'iscite' => 1
            ]);
        }

        if ($res === false) {
            return $this->buildFailed(ReturnCode::DB_SAVE_ERROR, '操作失败');
        } else {
            return $this->buildSuccess([]);
        }
    }

    /**
     * 菜单状态编辑
     * @return array
     * @author zhaoxiang <zhaoxiang051405@gmail.com>
     */
    public function changeStatus()
    {
        $id = $this->request->get('id');
        $status = $this->request->get('status');
        $res = CmsMenu::update([
            'id' => $id,
            'hide' => $status
        ]);
        if ($res === false) {
            return $this->buildFailed(ReturnCode::DB_SAVE_ERROR, '操作失败');
        } else {
            return $this->buildSuccess([]);
        }
    }

    /**
     * 编辑菜单
     * @return array
     * @author zhaoxiang <zhaoxiang051405@gmail.com>
     */
    public function edit()
    {
        $postData = $this->request->post();
        $res = new CmsMenu();
        // 过滤post数组中的非数据表字段数据
        $res->allowField(true)->save($postData, ['id' => $postData['id']]);
//        $res = CmsMenu::update($postData);

        // 新增成功后 把对应的缩略图改成引用状态1
        $fileId = $this->request->post('menuimgid');
        FilesManage::update([
            'id' => $fileId,
            'iscite' => 1
        ]);
        // 如果更改了缩略图 则把之前缩略图 引用改成0
        if ($postData['menuimgidBefore'] <> $fileId) {
            FilesManage::update([
                'id' => $postData['menuimgidBefore'],
                'iscite' => 0,
//                'ismenuimg' => 0
            ]);
        }

        if ($res === false) {
            return $this->buildFailed(ReturnCode::DB_SAVE_ERROR, '操作失败');
        } else {
            return $this->buildSuccess([]);
        }
    }

    /**
     * 删除菜单
     * @return array
     * @author zhaoxiang <zhaoxiang051405@gmail.com>
     */
    public function del()
    {
        $id = $this->request->get('id');
        if (!$id) {
            return $this->buildFailed(ReturnCode::EMPTY_PARAMS, '缺少必要参数');
        }
        $childNum = CmsMenu::where(['fid' => $id])->count();
        if ($childNum) {
            return $this->buildFailed(ReturnCode::INVALID, '当前菜单存在子菜单,不可以被删除!');
        } else {

            // 根据id 查缩略图id
            $data = CmsMenu::get($id);
            $fileId = $data->menuimgid;
            // 如果有缩略图
            if ($fileId !== 0) {
                // 查所有符合缩略图id 的数据
                $listObj = CmsMenu::all(['menuimgid' => $fileId]);
                // $this->debug($listObj);
                // $this->debug(count($listObj));
                // 如果数据>=2条 则不改变图片引用状态 否则改变为未引用
                if (count($listObj) < 2) {
                    FilesManage::update([
                        'id' => $fileId,
                        'iscite' => 0
                    ]);
                }
            }

            CmsMenu::destroy($id);
            return $this->buildSuccess([]);
        }
    }

    /**
     * CMS 栏目文件上传
     * @return array
     * @author zhaoxiang <zhaoxiang051405@gmail.com>
     */
    public function upload()
    {
        $path = '/upload/cms/menu/' . date('Ymd', time()) . '/';
        $name = $_FILES['file']['name'];
        $tmp_name = $_FILES['file']['tmp_name'];
        $error = $_FILES['file']['error'];
        //过滤错误
        if ($error) {
            switch ($error) {
                case 1 :
                    $error_message = '您上传的文件超过了PHP.INI配置文件中UPLOAD_MAX-FILESIZE的大小';
                    break;
                case 2 :
                    $error_message = '您上传的文件超过了PHP.INI配置文件中的post_max_size的大小';
                    break;
                case 3 :
                    $error_message = '文件只被部分上传';
                    break;
                case 4 :
                    $error_message = '文件不能为空';
                    break;
                default :
                    $error_message = '未知错误';
            }
            die($error_message);
        }
        $arr_name = explode('.', $name);
        $hz = array_pop($arr_name);
        $new_name = md5(time() . uniqid()) . '.' . $hz;
        if (!file_exists($_SERVER['DOCUMENT_ROOT'] . $path)) {
            mkdir($_SERVER['DOCUMENT_ROOT'] . $path, 0755, true);
        }
        if (move_uploaded_file($tmp_name, $_SERVER['DOCUMENT_ROOT'] . $path . $new_name)) {
            // 获取图片属性
            $fileSrc = '.' . $path . $new_name;
//            $this ->debug('++++'.$_FILES['file']);
//            dump($fileSrc);
            $image = \think\Image::open($fileSrc);
            // 返回图片的宽度
            $width = $image->width() . 'px';
            // 返回图片的高度
            $height = $image->height() . 'px';
            // 返回图片的类型
            $type = $image->type();
            // 返回图片的mime类型
//            $mime = $image->mime();
            // 返回图片的大小
            $size = filesize($fileSrc);
            $kb = 1024;
            $mb = 1024 * $kb;
            $gb = 1024 * $mb;
            if ($size < $kb) {
                $size = $size . "B";
            } elseif ($size < $mb) {
                $size = round($size / $kb, 2) . "KB";
            } elseif ($size < $gb) {
                $size = round($size / $mb, 2) . "MB";
            }
            // 保存到数据库 FilesManage
            $files = new FilesManage;
            // 模型对象赋值
            $files->data([
                'filename' => $new_name,
                'url' => $path . $new_name,
                'imgwidth' => $width,
                'imgheight' => $height,
                'filetype' => $type,
                'filesize' => $size,
                'ismenuimg' => 1,
                'userid' => $this->request->post('userid'),
                'username' => $this->request->post('username'),
                'createTime' => date('Y-m-d H:i:s', time())
            ]);
            $files->save();
            $fileId = $files->id;
            // 获取新增数据的id
            return $this->buildSuccess([
                'fileId' => $fileId,
                'fileName' => $new_name,
//                'fileUrl'  => $this->request->domain() . $path . $new_name,
                'fileUrl' => $path . $new_name,
                'width' => $width,
                'height' => $height,
                'type' => $type,
                'size' => $size,
            ]);
        } else {
            return $this->buildFailed(ReturnCode::FILE_SAVE_ERROR, '文件上传异常');
        }
    }

}
